#ifndef CFORNDK_STUDENT_H
#define CFORNDK_STUDENT_H

class Student {

    // score是Student的私有成员属性，外接无法修改
    // 声明友元函数，让类外部的函数操作类的私有属性
    friend void testModifyScore(Student *, float _score);

    // 友元类
    friend class Teacher;

    int age;
    int salary;
    char *name;
public:
    int temp;

    Student(int _age, int _salary); // 构造函数
    Student(){}; // 构造函数
    ~Student();// 析构函数,内存释放后自动调用该函数
    void setAge(int _age); // 普通函数
    void setName(char *name) const; // 常量函数，不允许修改类中的成员
    // 头文件可以声明并实现
    int getScore() {
        return score;
    }

public:
    // 操作符重载：重定义C++的内置运算法，如：+ - * /
    // 声明+方法接收Student对象，返回新的Student对象
    Student operator+(const Student &s) const {
        Student temp;
        temp.temp = this->temp + s.temp;
        return temp;
    }

private:
    float score;
};

// 友元类,类中所有成员都是友元的
class Teacher {
public:
    void call(Student *student) {
        student->score = 1000;
    }
};

#endif //CFORNDK_STUDENT_H
